// 知识点1：forward_list的相关操作比较特殊，有其自己特殊的删除和插入操作

// 知识点2 ：注意其删除操作时每个特殊操作的使用
#include <forward_list>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>

using namespace std;

int main(int argc, char **argv) {
  int ia[] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 55, 89};

  forward_list<int> forward_list1(ia, ia + 9);

  forward_list<int>::iterator it1 = forward_list1.begin(); //第一个元素
  forward_list<int>::iterator it2 = forward_list1.before_begin(); //首前元素

  while (it1 != forward_list1.end()) //删除操作
  {
    if ((*it1) % 2 == 1) {
      it1 = forward_list1.erase_after(
          it2); //特殊操作erase_after,删除的是迭代器参数之后的参数，返回同erase()
    } else      //若判断非偶数，则移到下一位置
    {
      it2 = it1; //将首前元素的标记置为第一个元素
      ++it1;
    }
  }

  //验证结果
  forward_list<int>::iterator it4 = forward_list1.begin();
  for (; it4 != forward_list1.end(); ++it4) {
    cout << *it4 << " ";
  }

  return 0;
}